/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Codigo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author kyerte
 */
public class ConsultaCaracteristicasProducto {

    private Connection conexion = null;
    private PreparedStatement consultarCaracteristicasProducto = null;
    private PreparedStatement insertarCaracteristicasProducto = null;
    private PreparedStatement actualizarCaracteristicasProducto = null;
    private PreparedStatement eliminarCaracteristicasProducto = null;
    private PreparedStatement obtenerIdCaracteristicasProducto = null;
    private PreparedStatement buscarCaracteristicasNombre = null;
    private PreparedStatement buscarCaracteristicasCorretajeTipo = null;
    private PreparedStatement buscarCaracteristicasDesarrollo = null;
    private PreparedStatement buscarCaracteristicasDesarrolloTipo = null;
    private PreparedStatement buscarCaracteristicasColonia = null;

    ConsultaCaracteristicasProducto() {

        try {

            conexion = FrmPrincipal.conexion;

            consultarCaracteristicasProducto = conexion.prepareStatement("SELECT "
                    + "CaracteristicasProd.idCaracteristicasProd, Producto.idProducto, "
                    + "CaracteristicasProd.NumRecamaras, CaracteristicasProd.Niveles, "
                    + "CaracteristicasProd.Precio, CaracteristicasProd.Terreno, "
                    + "CaracteristicasProd.Descripcion, CaracteristicasProd.TerrenoConstruido "
                    + "FROM CaracteristicasProd JOIN Producto WHERE "
                    + "CaracteristicasProd.idProducto = Producto.idProducto AND "
                    + "Producto.Desarrollo = ?");
            insertarCaracteristicasProducto = conexion.prepareStatement("INSERT "
                    + "INTO CaracteristicasProd(idProducto,NumRecamaras,Niveles,"
                    + "Precio, Terreno, Descripcion, TerrenoConstruido) "
                    + "VALUES(?, ?, ?, ?, ?, ?, ?)");
            actualizarCaracteristicasProducto = conexion.prepareStatement("UPDATE"
                    + " CaracteristicasProd SET idProducto=?, NumRecamaras=?, "
                    + "Niveles=?, Precio=?, Terreno=?, Descripcion=?, "
                    + "TerrenoConstruido=? WHERE idCaracteristicasProd=?");
            eliminarCaracteristicasProducto = conexion.prepareStatement("DELETE "
                    + "FROM CaracteristicasProd WHERE idCaracteristicasProd=?");
            obtenerIdCaracteristicasProducto = conexion.prepareStatement("SELECT "
                    + "idCaracteristicasProd WHERE idProducto=?");
            buscarCaracteristicasNombre = conexion.prepareStatement("SELECT "
                    + "CaracteristicasProd.idCaracteristicasProd, "
                    + "Producto.idProducto, CaracteristicasProd.NumRecamaras, "
                    + "CaracteristicasProd.Niveles, CaracteristicasProd.Precio, "
                    + "CaracteristicasProd.Terreno, CaracteristicasProd.Descripcion, "
                    + "CaracteristicasProd.TerrenoConstruido FROM "
                    + "CaracteristicasProd JOIN Producto WHERE "
                    + "CaracteristicasProd.idProducto = Producto.idProducto AND "
                    + "Producto.Desarrollo = ? AND Producto.Nombre = ?");
            buscarCaracteristicasCorretajeTipo = conexion.prepareStatement("SELECT "
                    + "CaracteristicasProd.idCaracteristicasProd, "
                    + "Producto.idProducto, CaracteristicasProd.NumRecamaras, "
                    + "CaracteristicasProd.Niveles, CaracteristicasProd.Precio, "
                    + "CaracteristicasProd.Terreno, CaracteristicasProd.Descripcion, "
                    + "CaracteristicasProd.TerrenoConstruido FROM "
                    + "CaracteristicasProd JOIN Producto WHERE "
                    + "CaracteristicasProd.idProducto = Producto.idProducto AND "
                    + "Producto.Desarrollo = ? AND Producto.Tipo = ?");
            buscarCaracteristicasDesarrollo = conexion.prepareStatement("SELECT "
                    + "CaracteristicasProd.idCaracteristicasProd, "
                    + "Producto.idProducto, CaracteristicasProd.NumRecamaras, "
                    + "CaracteristicasProd.Niveles, CaracteristicasProd.Precio, "
                    + "CaracteristicasProd.Terreno, CaracteristicasProd.Descripcion, "
                    + "CaracteristicasProd.TerrenoConstruido FROM "
                    + "CaracteristicasProd JOIN Producto JOIN Desarrollos WHERE "
                    + "CaracteristicasProd.idProducto = Producto.idProducto AND "
                    + "Producto.idDesarrollos=Desarrollos.idDesarrollos AND "
                    + "Producto.Desarrollo = true AND Desarrollos.Nombre = ?");
            buscarCaracteristicasDesarrolloTipo = conexion.prepareStatement("SELECT "
                    + "CaracteristicasProd.idCaracteristicasProd, "
                    + "Producto.idProducto, CaracteristicasProd.NumRecamaras, "
                    + "CaracteristicasProd.Niveles, CaracteristicasProd.Precio, "
                    + "CaracteristicasProd.Terreno, CaracteristicasProd.Descripcion, "
                    + "CaracteristicasProd.TerrenoConstruido FROM "
                    + "CaracteristicasProd JOIN Producto JOIN Desarrollos WHERE "
                    + "CaracteristicasProd.idProducto = Producto.idProducto AND "
                    + "Producto.idDesarrollos=Desarrollos.idDesarrollos AND "
                    + "Producto.Desarrollo = true AND Producto.Tipo = ?");
            buscarCaracteristicasColonia = conexion.prepareStatement("SELECT "
                    + "CaracteristicasProd.idCaracteristicasProd, "
                    + "Producto.idProducto, CaracteristicasProd.NumRecamaras, "
                    + "CaracteristicasProd.Niveles, CaracteristicasProd.Precio, "
                    + "CaracteristicasProd.Terreno, CaracteristicasProd.Descripcion,"
                    + " CaracteristicasProd.TerrenoConstruido FROM "
                    + "CaracteristicasProd JOIN Producto WHERE "
                    + "CaracteristicasProd.idProducto = Producto.idProducto AND "
                    + "Producto.Colonia = ?");
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
    }

    public List<CaracteristicasProducto> consultarCaracteristicasProducto(boolean esDesarrollo) {

        ResultSet conjuntoResultados = null;
        List<CaracteristicasProducto> resultadosCaracteristicasProducto = null;

        try {

            consultarCaracteristicasProducto.setBoolean(1, esDesarrollo);
            conjuntoResultados = consultarCaracteristicasProducto.executeQuery();

            resultadosCaracteristicasProducto = new ArrayList<CaracteristicasProducto>();

            while (conjuntoResultados.next()) {

                resultadosCaracteristicasProducto.add(new CaracteristicasProducto(
                        conjuntoResultados.getInt("idCaracteristicasProd"),
                        conjuntoResultados.getInt("idProducto"),
                        conjuntoResultados.getByte("NumRecamaras"),
                        conjuntoResultados.getByte("Niveles"),
                        conjuntoResultados.getDouble("Precio"),
                        conjuntoResultados.getFloat("Terreno"),
                        conjuntoResultados.getString("Descripcion"),
                        conjuntoResultados.getFloat("TerrenoConstruido")));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultadosCaracteristicasProducto;

    }

    public int agregarCaracteristicasProducto(int idProd, byte recamaras, byte numNiveles,
            double costo, float m2, String desc, float construido) {
        int resultado = 0;

        try {

            insertarCaracteristicasProducto.setInt(1, idProd);
            insertarCaracteristicasProducto.setByte(2, recamaras);
            insertarCaracteristicasProducto.setByte(3, numNiveles);
            insertarCaracteristicasProducto.setDouble(4, costo);
            insertarCaracteristicasProducto.setFloat(5, m2);
            insertarCaracteristicasProducto.setString(6, desc);
            insertarCaracteristicasProducto.setFloat(7, construido);

            resultado = insertarCaracteristicasProducto.executeUpdate();

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }

        return resultado;
    }

    public int actualizarCaracteristicasProducto(int idProd, byte recamaras, byte numNiveles,
            double costo, float m2, String desc, float construido, int id) {

        int resultado = 0;

        try {
            actualizarCaracteristicasProducto.setInt(1, idProd);
            actualizarCaracteristicasProducto.setByte(2, recamaras);
            actualizarCaracteristicasProducto.setByte(3, numNiveles);
            actualizarCaracteristicasProducto.setDouble(4, costo);
            actualizarCaracteristicasProducto.setFloat(5, m2);
            actualizarCaracteristicasProducto.setString(6, desc);
            actualizarCaracteristicasProducto.setFloat(7, construido);
            actualizarCaracteristicasProducto.setInt(8, id);

            resultado = actualizarCaracteristicasProducto.executeUpdate();

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int eliminarCaracteristicasProducto(int id) {
        int resultado = 0;

        try {

            eliminarCaracteristicasProducto.setInt(1, id);
            resultado = eliminarCaracteristicasProducto.executeUpdate();

        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return resultado;
    }

    public int obtenerIdCaracteristicasProducto(int idProducto) {
        int id = 0;

        try {
            obtenerIdCaracteristicasProducto.setInt(1, idProducto);
        } catch (SQLException ex) {
            ex.printStackTrace();
            close();
        }
        return id;
    }

    public List<CaracteristicasProducto> buscarCaracteristicasNombre(boolean esDesarrollo, String nombre) {

        ResultSet conjuntoResultados = null;
        List<CaracteristicasProducto> resultadosCaracteristicasProducto = null;

        try {

            buscarCaracteristicasNombre.setBoolean(1, esDesarrollo);
            buscarCaracteristicasNombre.setString(2, nombre);
            conjuntoResultados = buscarCaracteristicasNombre.executeQuery();

            resultadosCaracteristicasProducto = new ArrayList<CaracteristicasProducto>();

            while (conjuntoResultados.next()) {

                resultadosCaracteristicasProducto.add(new CaracteristicasProducto(
                        conjuntoResultados.getInt("idCaracteristicasProd"),
                        conjuntoResultados.getInt("idProducto"),
                        conjuntoResultados.getByte("NumRecamaras"),
                        conjuntoResultados.getByte("Niveles"),
                        conjuntoResultados.getDouble("Precio"),
                        conjuntoResultados.getFloat("Terreno"),
                        conjuntoResultados.getString("Descripcion"),
                        conjuntoResultados.getFloat("TerrenoConstruido")));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultadosCaracteristicasProducto;

    }

    public List<CaracteristicasProducto> buscarCaracteristicasCorretajeTipo(boolean esDesarrollo, String tipo) {

        ResultSet conjuntoResultados = null;
        List<CaracteristicasProducto> resultadosCaracteristicasProducto = null;

        try {

            buscarCaracteristicasCorretajeTipo.setBoolean(1, esDesarrollo);
            buscarCaracteristicasCorretajeTipo.setString(2, tipo);
            conjuntoResultados = buscarCaracteristicasCorretajeTipo.executeQuery();            

            resultadosCaracteristicasProducto = new ArrayList<CaracteristicasProducto>();

            while (conjuntoResultados.next()) {

                resultadosCaracteristicasProducto.add(new CaracteristicasProducto(
                        conjuntoResultados.getInt("idCaracteristicasProd"),
                        conjuntoResultados.getInt("idProducto"),
                        conjuntoResultados.getByte("NumRecamaras"),
                        conjuntoResultados.getByte("Niveles"),
                        conjuntoResultados.getDouble("Precio"),
                        conjuntoResultados.getFloat("Terreno"),
                        conjuntoResultados.getString("Descripcion"),
                        conjuntoResultados.getFloat("TerrenoConstruido")));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultadosCaracteristicasProducto;

    }

    public List<CaracteristicasProducto> buscarCaracteristicasDesarrollo(String nombre) {

        ResultSet conjuntoResultados = null;
        List<CaracteristicasProducto> resultadosCaracteristicasProducto = null;

        try {

            buscarCaracteristicasDesarrollo.setString(1, nombre);
            conjuntoResultados = buscarCaracteristicasDesarrollo.executeQuery();

            resultadosCaracteristicasProducto = new ArrayList<CaracteristicasProducto>();

            while (conjuntoResultados.next()) {

                resultadosCaracteristicasProducto.add(new CaracteristicasProducto(
                        conjuntoResultados.getInt("idCaracteristicasProd"),
                        conjuntoResultados.getInt("idProducto"),
                        conjuntoResultados.getByte("NumRecamaras"),
                        conjuntoResultados.getByte("Niveles"),
                        conjuntoResultados.getDouble("Precio"),
                        conjuntoResultados.getFloat("Terreno"),
                        conjuntoResultados.getString("Descripcion"),
                        conjuntoResultados.getFloat("TerrenoConstruido")));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultadosCaracteristicasProducto;

    }

    public List<CaracteristicasProducto> buscarCaracteristicasDesarrolloTipo(String tipo) {

        ResultSet conjuntoResultados = null;
        List<CaracteristicasProducto> resultadosCaracteristicasProducto = null;

        try {

            buscarCaracteristicasDesarrolloTipo.setString(1, tipo);
            conjuntoResultados = buscarCaracteristicasDesarrolloTipo.executeQuery();

            resultadosCaracteristicasProducto = new ArrayList<CaracteristicasProducto>();

            while (conjuntoResultados.next()) {

                resultadosCaracteristicasProducto.add(new CaracteristicasProducto(
                        conjuntoResultados.getInt("idCaracteristicasProd"),
                        conjuntoResultados.getInt("idProducto"),
                        conjuntoResultados.getByte("NumRecamaras"),
                        conjuntoResultados.getByte("Niveles"),
                        conjuntoResultados.getDouble("Precio"),
                        conjuntoResultados.getFloat("Terreno"),
                        conjuntoResultados.getString("Descripcion"),
                        conjuntoResultados.getFloat("TerrenoConstruido")));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultadosCaracteristicasProducto;

    }

    public List<CaracteristicasProducto> buscarCaracteristicasColonia(String colonia) {

        ResultSet conjuntoResultados = null;
        List<CaracteristicasProducto> resultadosCaracteristicasProducto = null;

        try {

            buscarCaracteristicasColonia.setString(1, colonia);
            conjuntoResultados = buscarCaracteristicasColonia.executeQuery();

            resultadosCaracteristicasProducto = new ArrayList<CaracteristicasProducto>();

            while (conjuntoResultados.next()) {

                resultadosCaracteristicasProducto.add(new CaracteristicasProducto(
                        conjuntoResultados.getInt("idCaracteristicasProd"),
                        conjuntoResultados.getInt("idProducto"),
                        conjuntoResultados.getByte("NumRecamaras"),
                        conjuntoResultados.getByte("Niveles"),
                        conjuntoResultados.getDouble("Precio"),
                        conjuntoResultados.getFloat("Terreno"),
                        conjuntoResultados.getString("Descripcion"),
                        conjuntoResultados.getFloat("TerrenoConstruido")));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();

        } finally {

            try {

                conjuntoResultados.close();

            } catch (SQLException ex) {
                ex.printStackTrace();
                close();
            }
        }

        return resultadosCaracteristicasProducto;

    }

    private void close() {
        try {
            conexion.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}
